// https://cli.vuejs.org/zh/config/#vue-config-js
const path = require('path')
const CompressionWebpackPlugin = require('compression-webpack-plugin') // 开启gzip压缩， 按需引用
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i // 开启gzip压缩， 按需写入
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
const titleconfig = require('./titleconfig.js')
const glob = require('glob')
const pages = {}

glob.sync('./src/pages/**/app.js').forEach(path => {
    const chunk = path.split('./src/pages/')[1].split('/app.js')[0]

    pages[chunk] = {
        entry: path,
        template: 'public/index.html',
        title: titleconfig[chunk].title,
        keywords: titleconfig[chunk].keywords,
        description: titleconfig[chunk].description,
        chunks: ['chunk-vendors', 'chunk-common', chunk]
    }
})
module.exports = {
    parallel: false,
    publicPath: '/',
    indexPath: 'index.html', // 相对于打包路径index.html的路径
    outputDir: 'dist',
    assetsDir: 'public', // 相对于outputDir的静态资源(js、css、img、fonts)目录
    lintOnSave: process.env.NODE_ENV === 'development',
    runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
    productionSourceMap: !IS_PROD, // 生产环境的 source map
    pages,
    chainWebpack: config => config.plugins.delete('named-chunks'),
    configureWebpack: config => {
        // 开启 gzip 压缩
        // 需要 npm i -D compression-webpack-plugin
        const plugins = []
        if (IS_PROD) {
            plugins.push(
                new CompressionWebpackPlugin({
                    filename: '[path].gz[query]',
                    algorithm: 'gzip',
                    test: productionGzipExtensions,
                    threshold: 10240,
                    minRatio: 0.8
                })
            )
        }
        config.plugins = [...config.plugins, ...plugins]
    },
    devServer: {
        port: 8081,
        open: IS_PROD,
        proxy: {
            '^/api/json': {
                target: 'http://127.0.0.1:8088',
                ws: false, // 是否启用websockets
                changeOrigin: true // 开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
                    // pathRewrite: {
                    //   '^/api': '/'
                    // }
            },
            '/obs': {
                target: 'http://192.168.3.196:9003',
                ws: false, // 是否启用websockets
                changeOrigin: true, // 开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
                pathRewrite: {
                    '^/api': ''
                }
            },
            '/local': {
                target: 'http://192.168.3.33:9003',
                ws: false, // 是否启用websockets
                changeOrigin: true, // 开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
                pathRewrite: {
                    '^/api': ''
                }
            },
            '^/cs/portal': {
                target: 'http://192.168.3.33:7011',
                ws: false, // 是否启用websockets
                changeOrigin: true // 开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
                    // pathRewrite: {
                    //   '^/api': '/'
                    // }
            },
            '^/api/basics': {
                target: 'http://192.168.3.33:8297',
                ws: false, // 是否启用websockets
                changeOrigin: true // 开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
                    // pathRewrite: {
                    //   '^/api': '/'
                    // }
            },
            '^/api/project': {
                target: 'http://192.168.3.33:8297',
                ws: false, // 是否启用websockets
                changeOrigin: true // 开启代理：在本地会创建一个虚拟服务端，然后发送请求的数据，并同时接收请求的数据，这样服务端和服务端进行数据的交互就不会有跨域问题
                    // pathRewrite: {
                    //   '^/api': '/'
                    // }
            }
        }
    }
}